# LingShu Docker镜像
# 基于仓颉语言的高性能消息队列

# 使用官方仓颉运行时镜像作为基础镜像
FROM cangjie/runtime:latest AS runtime

# 使用仓颉编译器镜像进行构建
FROM cangjie/compiler:latest AS builder

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 安装依赖并编译
RUN cjpm install && \
    cjpm build --release --output lingshu

# 运行时镜像
FROM runtime

# 设置标签
LABEL maintainer="LingShu Team" \
      version="0.1.0" \
      description="基于仓颉语言的高性能消息队列"

# 创建非root用户
RUN addgroup -g 1000 lingshu && \
    adduser -D -s /bin/sh -u 1000 -G lingshu lingshu

# 设置工作目录
WORKDIR /app

# 从构建阶段复制二进制文件
COPY --from=builder /app/lingshu /app/lingshu
COPY --from=builder /app/config.toml /app/config.toml

# 创建数据目录
RUN mkdir -p /app/data /app/logs && \
    chown -R lingshu:lingshu /app

# 切换到非root用户
USER lingshu

# 暴露端口
EXPOSE 4222 8080

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8080/health || exit 1

# 设置环境变量
ENV LINGSHU_CONFIG=/app/config.toml \
    LINGSHU_DATA_DIR=/app/data \
    LINGSHU_LOG_DIR=/app/logs

# 启动命令
CMD ["./lingshu", "--config", "/app/config.toml"]
